package com.spaymallweb.controller;

import com.spaymallcommon.MessageTextEntity;
import com.spaymallcommon.SignatureUtil;
import com.spaymallcommon.XmlUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/weixin/portal/")
@CrossOrigin("*")
public class WeixinPortalController {


    @Value("${weixin.config.token}")
    private String token;
    @Value("${weixin.config.originalid}")
    private String originalid;

    /**
     * 验证微信服务器接入，验证通过返回 echostr（验签）
     * @param signature 微信服务器将 token、timestamp、nonce 三个参数进行字典序排序，拼接后通过 SHA1 加密生成
     * @param timestamp 时间戳
     * @param nonce 随机数
     * @param echostr 随机字符串 第一次访问访问时，微信服务器会通过 GET 方法将 echostr 回复给开发者，开发者将 echostr 回复给微信服务器，微信服务器将验证开发者填写的 token 是否正确，并返回 echostr 给开发者，开发者将 echostr 回复给微信服务器，微信服务器验证通过，接入成功。
     * @return
     */
    @GetMapping(value = "/receive",produces = "text/plain;charset=utf-8")
    public String validate(@RequestParam(value = "signature") String signature, //微信服务器将 token、timestamp、nonce 三个参数进行字典序排序，拼接后通过 SHA1 加密生成
                           @RequestParam(value = "timestamp") String timestamp, //时间戳
                           @RequestParam(value = "nonce") String nonce, //随机数
                           @RequestParam(value = "echostr",required = false) String echostr){  //随机字符串 第一次访问访问时，微信服务器会通过 GET 方法将 echostr 回复给开发者，开发者将 echostr 回复给微信服务器，微信服务器将验证开发者填写的 token 是否正确，并返回 echostr 给开发者，开发者将 echostr 回复给微信服务器，微信服务器验证通过，接入成功。

        try {
            if (StringUtils.isAnyBlank(signature,timestamp,nonce,echostr)){
                throw new IllegalArgumentException("参数不合法");
            }

            boolean check = SignatureUtil.check(token,signature, timestamp, nonce);

            if (!check){
                return null;
            }

            return echostr;
        } catch (IllegalArgumentException e) {
            return null;
        }

    }

    @PostMapping(value = "/receive",produces = "application/xml;charset=utf-8")
    public String post(@RequestBody String requestBody,  //xml字符串 包含用户输入的内容
                       @RequestParam("signature") String signature,
                       @RequestParam("timestamp") String timestamp,
                       @RequestParam("nonce") String nonce,
                       @RequestParam("openid") String openid,   //微信用户openid
                       @RequestParam(name = "encrypt_type", required = false) String encType,
                       @RequestParam(name = "msg_signature", required = false) String msgSignature){

//        requestBody是一个xml字符串 其中的content是用户在公众号中输入的内容，是我们需要的数据，将xml字符串转为对象，方便拿到数据
        MessageTextEntity message = XmlUtil.xmlToBean(requestBody, MessageTextEntity.class);
        return buildMessageTextEntity(openid,"没有和"+message.getContent()+"相关的信息");
    }



    public String buildMessageTextEntity(String openid,String content){
        MessageTextEntity message = new MessageTextEntity();
        message.setCreateTime(String.valueOf(System.currentTimeMillis()/1000L));
        message.setFromUserName(originalid);
        message.setToUserName(openid);
        message.setMsgType("text");
        message.setContent(content);
        return XmlUtil.beanToXml(message);
    }


}
